'use strict';

module.exports = (options, app) => {
  return async function errorHandler(ctx, next) {
    try {
      await next();
    } catch (error) {
      // 确保app对象存在
      const logger = app && app.logger ? app.logger : console;
      logger.error(error);
      
      const status = error.status || 500;
      
      // 参数验证错误
      if (error.name === 'ValidationError') {
        ctx.status = 422;
        ctx.error('参数验证失败', 422, error.errors);
        return;
      }
      
      // 业务逻辑错误
      if (error.name === 'BusinessError') {
        ctx.status = 400;
        ctx.error(error.message, error.code);
        return;
      }
      
      // 未授权错误
      if (status === 401) {
        ctx.status = 401;
        ctx.error('未授权访问', 401);
        return;
      }
      
      // 权限错误
      if (status === 403) {
        ctx.status = 403;
        ctx.error('权限不足', 403);
        return;
      }
      
      // 默认服务器错误
      ctx.status = status;
      if (app && app.config && app.config.env === 'prod') {
        ctx.error('服务器内部错误');
      } else {
        ctx.error(error.message, status, {
          stack: error.stack,
        });
      }
    }
  };
};